#ifndef _TANK_H
#define _TANK_H
#include "Terrain.h"

struct sTank
{
    int tank_x;/**\brief l'abscisse du tank*/
    int tank_y;/**\brief l'ordoonnee du tank */
    int tank_temp;/**tank_temp est le temp d'alternation de l'evolution des ennemis,si il est egale à
    1 les énnemis et leurs tires bougent et -1 ils evoluent pas.  */
    int tank_baseok;/**\brief tank_baseok permet de confirmer si la base du tank
    est en acier ou pas.il prend 0 elle n'est pas en acier et 1 si elle l'est */
    int tank_forcetir;/**\brief tank_forcetir donne l'etat du tir du tank.
            0 c'est l'etat normal et 1 etat fort(capacité de detruire les murs en acier)*/
    int tank_projectile;/**\brief egale a 0 si le tir n'est pas lance et
                            1 si il est lance */
    int tank_vie;/**\brief le nbre de vie du tank */
    int tank_direction; /**\brief direction de son tir: 0 pour la gauche,
                1 pour la droite,2 pour le bas et 3 le haut */
};
typedef struct sTank Tank;

/**@brief :Procedure tankInit
 <B>tankInit:initialise le tank avec une position (4,14),avec
 un nombre de vie égale à 3 et son projectile a 0 qui signifie qu'il nest
  pas lancé </B> */
void tankInit(Tank*);

/**@brief : Fonction tankGetX renvoi un entier
 <B> tankGetX permet de recuper la position en x
du tank et de la retourner </B>*/
int tankGetX(const Tank*);

/**@brief Procedure tankSetTir:
<B>tankSetTir modifie la direction actuelle du tir du tank apres verrification
de la future direction.NB: 0<=nb<4 </B> */
void tankSetDirection(Tank* ,int nb);

/**@brief :Procedure tankSetProjectile
 <B> tankSetProjectile modifie l'etat du projectile du tank,
 elle le met a 0 si elle n'est pas lancé ou a 1 si elle est lancé </B>*/
void tankSetProjectile(Tank* ,int );

/**@brief : Fonction tankGetDirection renvoie un entier
  <B>tankGetDirection recupere la direction du tank et la retourne,elle prend
  comme valeur 0 pour la gauche,1 droite,2 bas et 3 pour le haut </B>*/
int tankGetDirection(const Tank* );

/**@brief :Fonction tankGetY renvoi un entier
  <B> tankGetY permet de recuper la position en y
du tank et de la retourner  </B> */
int tankGetY(const Tank*);

/**@brief :Fonction tankGetVie renvoi un entier
  <B> tankGetVie permet de recuper le nombre
de vie du tank et de le retourner */
int tankGetVie(const Tank*);

/**@brief :Procedure tankSetVie
<B> tankSetVie modifie le nombre de vie actuelle du tank,en lui atribuant une
nouvelle valeur passe en parametre</B>*/
void tankSetVie(Tank* ,int );

/**@brief :tankGetTemp->entier
<B>tankGetTemp recupere le temps d'alternation de tank</B> */
int tankGetTemp(const Tank* );

/**@brief :Procedure tankSetTemp
<B>tankSetTemp modifie le temps d'alternation du jeu du tank
en lui attribuant une nouvelle valeur passé en parametre </B> */
void tankSetTemp(Tank* ,int );

/**@brief : Procedure tankHaut
 <B> tankHaut permet de deplacer le tank
vers le haut en verrifiant la validite de la case avant et enregistre
    cette direction pour son tir </B>*/
void tankHaut(Tank* ,const Terrain*);

/**@brief :Procedure tankBas
 <B> tankBas permet de deplacer le tank
vers le bas en verrifiant la validite de la case avant et enregistre cette
    nouvelle direction si le deplacement reuissi </B>*/
void tankBas(Tank* ,const Terrain*);

/**@brief :Procedure tankGauche
<B> tankGauche permet de deplacer le tank
vers la Gauche en verrifiant la validite de la case avant le deplacement et
enregistre cette direction si il y a eu deplacement</B> */
void tankGauche(Tank* ,const Terrain* );

/**@brief :Procedure tankDroit
<B>tankDroit permet de deplacer le tank vers la Droite en verrifiant
la validite de la case avant et enregistre cette direction si reuissite</B> */
void tankDroit(Tank* ,const Terrain* );


/** tankTestRegression: procedure le bon fonctionnement de tous les
fonctions et procedure avant et apres modification */
void tankTestRegression();





#endif

